package edu.eam.paii.proyecto.entidades;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

@Entity
/**
 * @author Hector Bedoya Ortegon
 * @author Felipe Suarez Bedoya
 * Esta entidad permite manejar toda la informacion de el Cliente.
 */
/**
 * Name quevery 
 */
@NamedQueries(value = { @NamedQuery(name = "Cliente.listar", query = "select C from Cliente C")		
})
public class Cliente extends Persona {
	private String usuario;
	private String contrasena;

	private double ingresos;
	private double egresos;

	@OneToMany(mappedBy = "clienteSolicitudTarjetaC", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<SolicitudTarjetaCredito> solicitudeTarjetaC;

	
	@OneToMany(mappedBy = "clientePagoFactura", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Pago_Facturas> pagosFacturasCliente;

	@OneToMany(mappedBy = "clienteTarjetaCredito", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Tarjeta_Credito> tarjetas_Creditos;

	@OneToMany(mappedBy = "clienteCuenta", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Cuenta> cuentas;

	@OneToMany(mappedBy = "clienteCDT", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Ahorro_CDT> ahorro_CDTs;

	@OneToMany(mappedBy = "clienteTransaccion", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Transaccion> transaccionCliente;

	@ManyToOne
	@JoinColumn(name = "id_Servicio")
	private Servicio servicioCliente;

	@OneToMany(mappedBy = "clienteSolicitud", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Solicitud_Credito> solicitudes_Creditos;

	@OneToMany(mappedBy = "clienteCredito", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Credito> creditos;

	@OneToMany(mappedBy = "clienteTransaccion", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Transaccion> transacciones;

	@OneToMany(mappedBy = "clientePremio", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Cliente_Premio> premios;
	
	@OneToMany(mappedBy = "clienteServicios", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Servicio_Cliente>servicio_Clientes ;

	public Cliente(int cedula, String nombre, String apellidos, int telefono,
			String correo, Direccion direccionPersona, String usuario,
			String contrasena, double ingresos, double egresos) {
		super(cedula, nombre, apellidos, telefono, correo, direccionPersona);
		this.usuario = usuario;
		this.contrasena = contrasena;
		this.ingresos = ingresos;
		this.egresos = egresos;
	}

	
	
	public Cliente(int cedula, String nombre, String apellidos, int telefono,
			String correo, Direccion direccionPersona, String usuario,
			String contrasena, double ingresos, double egresos,
			List<SolicitudTarjetaCredito> solicitudeTarjetaC,
			List<Pago_Facturas> pagosFacturasCliente,
			List<Tarjeta_Credito> tarjetas_Creditos, List<Cuenta> cuentas,
			List<Ahorro_CDT> ahorro_CDTs, List<Transaccion> transaccionCliente,
			Servicio servicioCliente,
			List<Solicitud_Credito> solicitudes_Creditos,
			List<Credito> creditos, List<Transaccion> transacciones,
			List<Cliente_Premio> premios) {
		super(cedula, nombre, apellidos, telefono, correo, direccionPersona);
		this.usuario = usuario;
		this.contrasena = contrasena;
		this.ingresos = ingresos;
		this.egresos = egresos;
		this.solicitudeTarjetaC = solicitudeTarjetaC;
		this.pagosFacturasCliente = pagosFacturasCliente;
		this.tarjetas_Creditos = tarjetas_Creditos;
		this.cuentas = cuentas;
		this.ahorro_CDTs = ahorro_CDTs;
		this.transaccionCliente = transaccionCliente;
		this.servicioCliente = servicioCliente;
		this.solicitudes_Creditos = solicitudes_Creditos;
		this.creditos = creditos;
		this.transacciones = transacciones;
		this.premios = premios;
	}



	public List<Pago_Facturas> getPagosFacturasCliente() {
		return pagosFacturasCliente;
	}



	public void setPagosFacturasCliente(List<Pago_Facturas> pagosFacturasCliente) {
		this.pagosFacturasCliente = pagosFacturasCliente;
	}



	public List<Transaccion> getTransaccionCliente() {
		return transaccionCliente;
	}



	public void setTransaccionCliente(List<Transaccion> transaccionCliente) {
		this.transaccionCliente = transaccionCliente;
	}



	public Servicio getServicioCliente() {
		return servicioCliente;
	}



	public void setServicioCliente(Servicio servicioCliente) {
		this.servicioCliente = servicioCliente;
	}



	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getContrasena() {
		return contrasena;
	}

	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}

	public double getIngresos() {
		return ingresos;
	}

	public void setIngresos(double ingresos) {
		this.ingresos = ingresos;
	}

	public double getEgresos() {
		return egresos;
	}

	public void setEgresos(double egresos) {
		this.egresos = egresos;
	}

	public List<SolicitudTarjetaCredito> getSolicitudeTarjetaC() {
		return solicitudeTarjetaC;
	}

	public void setSolicitudeTarjetaC(
			List<SolicitudTarjetaCredito> solicitudeTarjetaC) {
		this.solicitudeTarjetaC = solicitudeTarjetaC;
	}

	public List<Tarjeta_Credito> getTarjetas_Creditos() {
		return tarjetas_Creditos;
	}

	public void setTarjetas_Creditos(List<Tarjeta_Credito> tarjetas_Creditos) {
		this.tarjetas_Creditos = tarjetas_Creditos;
	}

	public List<Cuenta> getCuentas() {
		return cuentas;
	}

	public void setCuentas(List<Cuenta> cuentas) {
		this.cuentas = cuentas;
	}

	public List<Ahorro_CDT> getAhorro_CDTs() {
		return ahorro_CDTs;
	}

	public void setAhorro_CDTs(List<Ahorro_CDT> ahorro_CDTs) {
		this.ahorro_CDTs = ahorro_CDTs;
	}

	public List<Solicitud_Credito> getSolicitudes_Creditos() {
		return solicitudes_Creditos;
	}

	public void setSolicitudes_Creditos(
			List<Solicitud_Credito> solicitudes_Creditos) {
		this.solicitudes_Creditos = solicitudes_Creditos;
	}

	public List<Credito> getCreditos() {
		return creditos;
	}

	public void setCreditos(List<Credito> creditos) {
		this.creditos = creditos;
	}

	public List<Transaccion> getTransacciones() {
		return transacciones;
	}

	public void setTransacciones(List<Transaccion> transacciones) {
		this.transacciones = transacciones;
	}

	public List<Cliente_Premio> getPremios() {
		return premios;
	}

	public void setPremios(List<Cliente_Premio> premios) {
		this.premios = premios;
	}

}
